package com.atguigu.bigdata.scala.chapter05

object Scala10_Function {

    def main(args: Array[String]): Unit = {

        // TODO 函数式编程 - 闭包
        // Scala早期版本的闭包采用匿名内部类实现，从2.12版本开始，采用变更函数声明方式
        // 读源码：
//        def outer( x : Int ) = {
//            def inner( y : Int )  = {
//                x + y
//            }
//
//            inner _
//        }
//
//
//        val r = outer(10)(20)
//        println(r)
        val age = 30

        def test(): Unit = {
            println(age + 20)
        }

        // java中没有函数对象的概念，底层实现就需要进行包装，这个操作也是闭包
        // 所以早期版本中如何判断程序中有没有闭包，就看是否会编译出匿名函数类
        // 后面学习的Spark框架就有这样判断，但是新版本的scala改变了编译规则，
        val f = test _
        f()
    }
}
